#ifndef __UACOUT_H__
#define __UACOUT_H__


#include <map>
#include <string>
#include <alsa/asoundlib.h>
#include <mutex>
#include "json.h"
#include "UsbDevice.h"

namespace Usbstream{

#ifdef __cplusplus
extern "C" {
#endif

using namespace std;
class UacOut : public  UsbDevice{
public:
	UacOut(int soundnum);
	~UacOut();

	/**
	 * 获取对象参数的接口
	 * */
	bool getSupportParams(Json::Value &params);

	/**
	 * 设置对象参数的接口
	 * */
	bool setParams(const Json::Value params);

	//输出对象流的接口
	bool writeStream(void *buf, int length);

	bool stopStream();
private:
	/**
	 * 初始化对象的接口
	 * */
	bool initUacOut();
	/**
	 * 反初始化对象的接口
	 * */
	bool deInitUacOut();

private:
	//声卡的编号
	int m_soundnum;
	//获取声卡输出参数的map
	Json::Value m_supportParam;
	//用于控制声卡的句柄和硬件结构体
	snd_pcm_t *m_playbackHandle;
	snd_pcm_hw_params_t *m_hwParams;
	//使用标志
	bool m_used;
	bool m_alsainit;
};

#ifdef __cplusplus
}
#endif

}
#endif
